﻿using Newtonsoft.Json;

namespace Agile.Infra.Pay.WxPay.Models
{
    public class WxPayNotifyRequest
    {
        /// <summary> 【通知ID】回调通知的唯一编号 </summary>
        [JsonProperty("id")]
        public string ID { get; set; }

        /// <summary> 【通知创建时间】 </summary>
        [JsonProperty("create_time")]
        public string CreateTime { get; set; }

        /// <summary> 【通知的类型】微信支付回调通知的类型。 </summary>
        [JsonProperty("resource_type")]
        public string ResourceType { get; set; }

        /// <summary> 【通知数据类型】通知的资源数据类型，固定为encrypt-resource。 </summary>
        [JsonProperty("event_type")]
        public string EventType { get; set; }

        /// <summary> 【回调摘要】微信支付对回调内容的摘要备注。 </summary>
        [JsonProperty("summary")]
        public string Summary { get; set; }

        /// <summary> 【通知数据】通知资源数据。 </summary>
        [JsonProperty("resource")]
        public WxPayNotifyResource Resource { get; set; }
    }

    public class WxPayNotifyResource
    {
        /// <summary> 【原始回调类型】加密前的对象类型，为transaction。 </summary>
        [JsonProperty("original_type")]
        public string OriginalType { get; set; }

        /// <summary> 【加密算法类型】回调数据密文的加密算法类型，目前为AEAD_AES_256_GCM，开发者需要使用同样类型的数据进行解密。 </summary>
        [JsonProperty("algorithm")]
        public string Algorithm { get; set; }

        /// <summary> 【数据密文】Base64编码后的回调数据密文，商户需Base64解码并使用APIV3密钥解密 </summary>
        [JsonProperty("ciphertext")]
        public string CipherText { get; set; }

        /// <summary> 【附加数据】参与解密的附加数据，该字段可能为空。 </summary>
        [JsonProperty("associated_data")]
        public string AassociatedData { get; set; }

        /// <summary> 【随机串】参与解密的随机串。 </summary>
        [JsonProperty("nonce")]
        public string Nonce { get; set; }
    }
}
